package abastecimento;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;

import javax.microedition.rms.RecordStore;

import abastecimento.Abastecimento;
import excecoes.ExcecaoAbastecimentoInexistente;

/**
 * 
 * @author ricardo vasconcelos
 *
 */

public class RepositorioAbastecimentoArray implements IRepositorioAbastecimento {

	private int indiceRepositorio;

	private final static int TAMANHO_REPOSITORIO = 20;

	private Abastecimento[] abastecimentos;

	public RepositorioAbastecimentoArray() {
		this.indiceRepositorio = 0;
		this.abastecimentos = new Abastecimento[TAMANHO_REPOSITORIO];
	}

	private int procurarIndice(int pNumero) {
		int indice = -1;
		boolean achou = false;

		int i = 0;

		while ((i < indiceRepositorio) && (!achou)) {
			if (abastecimentos[i].getNumero() == pNumero) {
				indice = i;
				achou = true;
			}

			i++;
		}

		return indice;
	}

	public boolean isAbastecimentoExistente(int pNumero) {
		boolean resp = false;

		int indice = this.procurarIndice(pNumero);

		if (indice != -1) {
			resp = true;
		}

		return resp;
	}

	public void inserirAbastecimento(Abastecimento pAbastecimento) {
		abastecimentos[indiceRepositorio] = pAbastecimento;
		indiceRepositorio++;
	}

	public Abastecimento consultarAbastecimentoPorChavePrimaria(int pNumero)
			throws ExcecaoAbastecimentoInexistente {
		Abastecimento abastecimento = null;

		if (this.isAbastecimentoExistente(pNumero)) {
			int indice = this.procurarIndice(pNumero);
			abastecimento = abastecimentos[indice];
		} else {
			throw new ExcecaoAbastecimentoInexistente(pNumero);
		}

		return abastecimento;
	}

	public void alterarAbastecimento(Abastecimento pAbastecimento)
			throws ExcecaoAbastecimentoInexistente {
		int indice = this.procurarIndice(pAbastecimento.getNumero());

		if (indice != -1) {
			abastecimentos[indice] = pAbastecimento;
		} else {
			throw new ExcecaoAbastecimentoInexistente(pAbastecimento
					.getNumero());
		}
	}

	public void removerAbastecimento(int pNumero)
			throws ExcecaoAbastecimentoInexistente {
		if (this.isAbastecimentoExistente(pNumero)) {
			int indice = this.procurarIndice(pNumero);
			abastecimentos[indice] = abastecimentos[indiceRepositorio - 1];
			abastecimentos[indiceRepositorio - 1] = null;
			indiceRepositorio--;
		} else {
			throw new ExcecaoAbastecimentoInexistente(pNumero);
		}
	}
	
	public Abastecimento[] listarAbastecimentos() {
		if (indiceRepositorio > 0) {
			Abastecimento[] resposta = new Abastecimento[indiceRepositorio];
			
			for (int i = 0; i < indiceRepositorio; i++) {
				resposta[i] = abastecimentos[i];
			}
			
			return resposta;
		} else {
			return null;
		}
	}
}
